package Top;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;

public class Top136 {

    public int singleNumber(int[] nums) {
        /*HashMap<Integer, Integer> hashMap = new HashMap<>();
        //1.循环遍历将数加入hash表中，查看是否有这个数
        for (int num : nums) {
            Integer count = hashMap.get(num);
            count = count == null ? 1 : ++count;
            hashMap.put(num, count);
        }
        //遍历hash表中的所有键，得到对应的count值
        for (Integer i : hashMap.keySet()) {
            Integer count = hashMap.get(i);
            if (count == 1){
                return i;
            }
        }
        return -1;*/

        //方法二
        /*int single = 0;
        for (int num : nums) {
            single ^= num;
        }
        return single;*/

        //方法三：
        Set<Integer> set=new HashSet<>();
        for (int i = 0; i < nums.length; i++) {
            //如果不想同则添加进set集合中，如果不能添加进hashset集合中，说明两个数相同，移除set相同中相同的数
            if (!set.add(nums[i])){
                set.remove(nums[i]);
            }
        }
        //最后输出集合中的文艺一个数
        return set.iterator().next();
    }

    public static void main(String[] args) {
        int[] nums = {12,3,3,4,12};
        Top136 top136 = new Top136();
        System.out.println(top136.singleNumber(nums));
    }
}
